% 遗传算法按照已有群体进行进化，如果GA_Compute计算不足可继续进化，需要具备初始化的参数
function [population] = GA_ComputeContinue(population,continuenumGenerations,crossoverRate,mutationRate)
    global conID
    % 注意遗传计算需要将输出结果作为新的个体进行进化，不然会丢失种群
    fprintf("迭代计数清0，按照已有群体进行进化");
    round_count = 1;
    tic;
    conID = atkOpen();
    % 主循环
    for gen = 1:continuenumGenerations
        
        tElapsed = toc;
        fprintf("第%d轮迭代,时间:%.2f秒\n",round_count,tElapsed);
        % 数据更新到ATK中
        tElapsed = toc;
        fprintf("将种群数据更新到ATK中,时间:%.2f秒\n",tElapsed);

        GA_populationATKUpdate(population);

        tElapsed = toc;
        fprintf("更新完成,时间:%.2f秒\n",tElapsed);


        % 选择和计算适应度在同一函数完成,采用二元锦标赛算法
        tElapsed = toc;
        fprintf("计算适应度并选择,时间:%.2f秒\n",tElapsed);

        selectedPopulation = GA_binaryTournamentSelection(population);
        
        tElapsed = toc;
        fprintf("选择完成,时间:%.2f秒\n",tElapsed);


        % 交叉变异操作
        tElapsed = toc;
        fprintf("交叉变异,时间:%.2f秒\n",tElapsed);

        children = GA_crossoverMutation(selectedPopulation,crossoverRate,mutationRate);

        tElapsed = toc;
        fprintf("交叉变异完成,时间:%.2f秒\n",tElapsed);
        
        % 替换旧种群和更新最佳个体
        tElapsed = toc;
        fprintf("将子类数据更新到ATK中,替换旧种群和更新最佳个体,时间:%.2f秒\n",tElapsed);

        GA_populationATKUpdate(children);
        tElapsed = toc;
        fprintf("更新完成,时间:%.2f秒\n",tElapsed);
        
        population = GA_replacePopulation(population, children);

        tElapsed = toc;
        fprintf("种群替换完成,时间:%.2f秒\n\n\n",tElapsed)


        %[bestIndividual, bestFitness] = updateBestIndividual(population, fitnessValues);
        round_count = round_count+1;
    end
    
    % 返回最终的最佳个体和适应度值
    fprintf('现有种群:\n');
    population
end